package com.lgc.leetcode.medium.letterCombinations17;

import java.util.ArrayList;
import java.util.List;

public class Program {
    public static void main(String[] args) {
        //给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。
        //给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。

        Program program = new Program();
        List<String> aa = program.letterCombinations("25");

        int a=0;
    }

    public List<String> letterCombinations(String digits) {
        List<String> result = new ArrayList<String>();
        if(digits.length()==0){
            return result;
        }

        String[] s=new String[digits.length()];
        for(int i=0;i<digits.length();i++){
            switch (digits.charAt(i)){
                case '2':s[i]="abc";break;
                case '3':s[i]="def";break;
                case '4':s[i]="ghi";break;
                case '5':s[i]="jkl";break;
                case '6':s[i]="mno";break;
                case '7':s[i]="pqrs";break;
                case '8':s[i]="tuv";break;
                case '9':s[i]="wxyz";break;
            }
        }

        result = getString(s,0,result);

        return result;
    }

    public List<String> getString(String[] s,int index,List<String> list){
        List<String> result = new ArrayList<String>();
        if(index<=s.length-1){
            if(index==0){
                for(int i=0;i<s[index].length();i++){
                    result.add(s[index].substring(i,i+1));
                }
            }else{
                for(int i=0;i<s[index].length();i++){
                    for(int j=0;j<list.size();j++){
                        result.add(list.get(j)+s[index].substring(i,i+1));
                    }
                }
            }

            result = getString(s,index+1,result);
        }else{
            result = list;
        }

        return result;
    }
}
